Virtualization allows multiplexing of the underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor or a host operating system. The hypervisor emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer.
Virtual machines can be provided by a centralized host that is coupled to multiple clients over a network. Some of the clients can be thin clients that have limited memory and processing capacities, and some of the clients can be thick (fat) clients that have high-speed central processing units (CPUs), large memory and graphics processors. Conventional techniques treat these clients equally and allocate the same load to all of the clients. Thus, a system that includes a mix of client types can have available resources under-utilized.